/*
  学习目标：setState - 第二种写法
  语法: setState((旧的state对象) => 新的state对象)
  效果: 依然合并执行, 会将上一次的计算结果, 传给下一次的计算参数, 形成串联的效果
  目的: 减少render执行次数, 避免浪费性能
  场景:  💥一旦发现产生了覆盖效果, 立即考虑使用第二种写法
*/

import React, { Component } from 'react';

export default class App extends Component {
  state = {
    count: 0,
  };

  handleClick = () => {
    this.setState((preState) => {
      return {
        count: preState.count + 1,
      };
    });

    this.setState((preState) => {
      return {
        count: preState.count + 2,
      };
    });

    this.setState((preState) => {
      return {
        count: preState.count + 3,
      };
    });

    // 依然是0, setState永远是异步的
    console.log('this.state.count  ----->  ', this.state.count);
  };

  render() {
    console.log('render被执行了  ----->  '); // ? render执行了几次??
    const { count } = this.state;
    return (
      <div>
        <h1>{count}</h1>
        <button onClick={this.handleClick}>点我</button>
      </div>
    );
  }
}
